package com.telchina.workorder.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.telchina.common.core.domain.AjaxResult;
import com.telchina.workorder.domain.WoWorkOrder;
import com.telchina.workorder.domain.vo.WoWorkOrderReqVO;
import com.telchina.workorder.domain.vo.WoWorkOrderVO;

import java.util.List;
import java.util.Map;

/**
 * 工单信息（受理单）Service接口
 *
 * @author konghao
 * @date 2023-02-21
 */
public interface IWoWorkOrderService {
    /**
     * 查询工单信息（受理单）
     *
     * @param id 工单信息（受理单）ID
     * @return 工单信息（受理单）
     */
    public WoWorkOrder selectById(String id);

    /**
     * 分页查询工单信息（受理单）列表
     *
     * @param woWorkOrder 工单信息（受理单）
     * @return 工单信息（受理单）集合
     */
    public IPage<WoWorkOrder> selectList(IPage<WoWorkOrder> page, WoWorkOrder woWorkOrder);

    /**
     * 查询所有工单信息（受理单）列表
     *
     * @param woWorkOrder 工单信息（受理单）
     * @return 工单信息（受理单）集合
     */
    public List<WoWorkOrderVO> selectListAll(WoWorkOrderReqVO woWorkOrder);

    /**
     * 新增工单信息（受理单）
     *
     * @param woWorkOrder 工单信息（受理单）
     * @return 结果
     */
    public AjaxResult insert(WoWorkOrder woWorkOrder);

    /**
     * 修改工单信息（受理单）
     *
     * @param woWorkOrder 工单信息（受理单）
     * @return 结果
     */
    public AjaxResult update(WoWorkOrder woWorkOrder);

    /**
     * 批量删除工单信息（受理单）
     *
     * @param ids 需要删除的工单信息（受理单）ID
     * @return 结果
     */
    public int deleteByIds(String[] ids);

    /**
     * 删除工单信息（受理单）信息
     *
     * @param id 工单信息（受理单）ID
     * @return 结果
     */
    public int deleteById(String id);

    /**
     * 派单业务处理
     * @param maps 派单数据参数
     * @return
     */
    AjaxResult dispatchWorkOrder(Map<String, Object> maps);

    /**
     * 获取工单代办列表
     * @param woWorkOrder
     * @return
     */
    List<WoWorkOrderVO> selectTodoList(WoWorkOrderReqVO woWorkOrder);

    /**
     * 获得指定流程实例的任务列表
     * @param processInstanceId
     * @return
     */
    List<Map> getTaskListByProcessInstanceId(String processInstanceId);

    /**
     * 工单转派业务处理
     * @param maps
     * @return
     */
    AjaxResult sendLastWorkOrder(Map<String, Object> maps);

    /**
     *
     * @param workOrderNumber
     * @return
     */
    WoWorkOrderVO getWorkOrderByWorkOrderNumber(String workOrderNumber);

    /**
     * 通过单号修改
     * @param woWorkOrder
     */
    int updateByWorkOrderNumber(WoWorkOrder woWorkOrder);

    /**
     * 未处结
     * @param woWorkOrder
     * @return
     */
    List<WoWorkOrder> selectListAllNoEnd(WoWorkOrderReqVO woWorkOrder);

    /**
     * 并单或者解除并单
     * opt： merge 并单；Unmerge 解除并单
     * @param maps
     * @return
     */
    AjaxResult changeMergeWorkOrderHandle(Map<String, Object> maps);

    /**
     * 并单模块数据查询
     * @param woWorkOrder
     * @return
     */
    List<WoWorkOrder> selectListMerge(WoWorkOrderReqVO woWorkOrder);

    /**
     *
     * @param woWorkOrder
     * @return
     */
    AjaxResult todoWorkOrderListNum(WoWorkOrderReqVO woWorkOrder);
}
